import { getAgeByIdCard } from "./index";
/**
 * 是否电话号码
 * @param rule
 * @param value
 * @param callback
 */
export function validatePhone(rule, value, callback) {
  const regTel = /^0\d{2,3}?\d{7,8}$/;
  const regM = /^1[3|4|5|6|7|8|9][0-9]\d{8}$/;
  if (value === "" || value === undefined || value === null) {
    callback();
  } else if (!regM.test(value) && value !== "") {
    if (!regTel.test(value) && value !== "") {
      callback(new Error("请输入正确的电话号码"));
    } else {
      callback();
    }
  } else {
    callback();
  }
}
/**
 * 是否为移动电话
 * @param rule
 * @param value
 * @param callback
 */
export function validateMobilePhone(rule, value, callback) {
  const reg = /^1[3|4|5|6|7|8|9][0-9]\d{8}$/;
  if (value === "" || value === undefined || value === null) {
    callback();
  } else if (!reg.test(value) && value !== "") {
    callback(new Error("请输入正确的移动电话号码"));
  } else {
    callback();
  }
}
/**
 * 是否固话
 * @param rule
 * @param value
 * @param callback
 */
export function validateFixedNumber(rule, value, callback) {
  const reg = /^0\d{2,3}?\d{7,8}$/;
  if (value === "" || value === undefined || value === null) {
    callback();
  } else if (!reg.test(value) && value !== "") {
    callback(new Error("请输入正确的固话号码"));
  } else {
    callback();
  }
}
/**
 * 是否为传真
 * @param rule
 * @param value
 * @param callback
 */
export function validateFax(rule, value, callback) {
  const reg = /^(\d{3,4}-)?\d{7,8}$/;
  if (value === "" || value === undefined || value === null) {
    callback();
  } else if (!reg.test(value) && value !== "") {
    callback(new Error("请输入正确的传真"));
  } else {
    callback();
  }
}

/**
 * 是否为空
 */
export function validateSpace(rule, value, callback) {
  const reg = /(^\s+)|(\s+$)|\s+/g;
  if (reg.test(value)) {
    callback(new Error("请输入非空格字符！"));
  } else if (!value) {
    callback(new Error("请输入必填项！"));
  } else {
    callback();
  }
}

/**
 * 是否身份证号码
 * @param rule
 * @param value
 * @param callback
 */
export function validateIdNo(rule, value, callback) {
  const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
  if (value === "" || value === undefined || value === null) {
    callback();
  } else if (!reg.test(value) && value !== "") {
    callback(new Error("请输入正确的身份证号码"));
  } else {
    const age = getAgeByIdCard(value);
    if (age < 0 || age > 200) {
      callback(new Error("请输入正确的身份证号码"));
    }
    callback();
  }
}

/**
 * 是否为数字
 * @param rule
 * @param value
 * @param callback
 */
export function validateNumber(rule, value, callback) {
  const reg = /(^\d*$)/;
  if (value === "" || value === undefined || value === null) {
    callback();
  } else if (!reg.test(value) && value !== "") {
    callback(new Error("请输入数字"));
  } else {
    callback();
  }
}
/**
 * 是否为整数
 * @param rule
 * @param value
 * @param callback
 */
export function validateIntger(rule, value, callback) {
  const reg = /(^[1-9]\d*$)/;
  if (value === "" || value === undefined || value === null) {
    callback();
  } else if (!reg.test(value) && value !== "") {
    callback(new Error("请输入数字"));
  } else if (value > 2147483647 || value < 0) {
    callback(new Error("请输入小于2147483647数字"));
  } else {
    callback();
  }
}
/**
 * 是否为年龄
 * @param rule
 * @param value
 * @param callback
 */
export function validateAge(rule, value, callback) {
  const reg = /(^[1-9]\d*$)/;
  if (value === "" || value === undefined || value === null) {
    callback();
  } else if (!reg.test(value) && value !== "") {
    callback(new Error("请输入数字"));
  } else if (value > 200 || value < 0) {
    callback(new Error("请输入小于200数字"));
  } else {
    callback();
  }
}
/**
 * 是否为车牌号
 * @param rule
 * @param value
 * @param callback
 */
export function isLicenseNo(rule, value, callback) {
  const regExp =
    /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[a-zA-Z](([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼ABCDEFGHJK]((?![IO])[a-zA-Z0-9](?![IO]))[0-9]{4})|([0-9]{5}[ABCDEFGHJK]))|[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z0-9]{1}[A-Z0-9]{1}[A-Z0-9应]{4,5}[A-Z0-9挂学警港澳领使急]{1})$/;
  if (value === "" || value === undefined || value === null) {
    callback(new Error("请输入车牌号"));
  } else if (!regExp.test(value)) {
    callback(new Error("请输入正确的车牌号！"));
  } else {
    callback();
  }
}
export default {
  validatePhone,
  validateFixedNumber,
  validateSpace,
  validateIdNo,
  validateAge,
  validateIntger,
  validateNumber,
};
